#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :tuple.py
# @Time      :2021/2/24 14:45
# @Author    :Letquit
"""
文件说明：

"""
# tuple和list非常类似，但是tuple一旦初始化就不能修改
classmates = ('Michael', 'Bob', 'Tracy')
print(classmates)
# classmates这个tuple不能变了，它也没有append()，insert()这样的方法。
# 其他获取元素的方法和list是一样的，你可以正常地使用classmates[0]，classmates[-1]，但不能赋值成另外的元素
# classmates.append()
# classmates.insert()
print(classmates[1])
print(classmates[-1])
# classmates[1] = 'Mick'
# 不可变的tuple有什么意义？因为tuple不可变，所以代码更安全。如果可能，能用tuple代替list就尽量用tuple。
# tuple的陷阱
# 当你定义一个tuple时，在定义的时候，tuple的元素就必须被确定下来
t = (1, 2)
print(t)
# 如果要定义一个空的tuple，可以写成()
t = ()
print(t)
# 但是，要定义一个只有1个元素的tuple，如果你这么定义
t = (1)
print(t)
# 定义的不是tuple，是1这个数！这是因为括号()既可以表示tuple，又可以表示数学公式中的小括号，这就产生了歧义，
# 因此，Python规定，这种情况下，按小括号进行计算，计算结果自然是1。
# 所以，只有1个元素的tuple定义时必须加一个逗号,，来消除歧义
t = (1,)
# Python在显示只有1个元素的tuple时，也会加一个逗号,，以免你误解成数学计算意义上的括号
print(t)
# “可变的”tuple
t = ('a', 'b', ['A', 'B'])
print(t)
t[2][0] = 'X'
t[2][1] = 'Y'
print(t)
# tuple的元素确实变了，但其实变的不是tuple的元素，而是list的元素
s = ['A', 'B']
t = ('a', 'b', s)
print(t)
# 指向的这个list本身是可变的
s[0] = 'X'
s[1] = 'Y'
print(t)
# 理解了“指向不变”后，要创建一个内容也不变的tuple怎么做？那就必须保证tuple的每一个元素本身也不能变
t = ('a', 'b', ('A', 'B'))
print(t)
# t[2][0] = 'X'
# 练习
L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']
]
# 打印Apple:
print(L[0][0])
# 打印Python:
print(L[1][1])
# 打印Lisa:
print(L[2][2])




if __name__ == "__main__":
    run_code = 0
